シェル芸 awk
Ctr Alt Tを同時押しでターミナルが立ち上がる
sed
検索文字列の再利用は&をつかう(ここでは&がエチルになっている)
code:sed.bash
moch@m-desktop:~$ echo クロロエチルエーテル| sed 's/エチル/&&/'
クロロエチルエチルエーテル
moch@m-desktop:~$ echo クロロエチルエーテル| sed 's/エチル/&&&/'
クロロエチルエチルエチルエーテル
moch@m-desktop:~$
検索対象の文字列を()で囲むと順番に番号が与えられる
番号を使ってよびだすことができる
code:sed.bash
moch@m-desktop:~$ echo クロロメチルエチルエーテル| sed -E 's/(メチル)(エチル)/\2\1/'
クロロエチルメチルエーテル
moch@m-desktop:~$
awk
正規表現、条件分岐、printfとprintのつかいかた
code:awk.bash
moch@m-desktop:~$ seq 5 | awk '/24/' 2
4
moch@m-desktop:~$ seq 5 | awk '$1%2==0'
2
4
moch@m-desktop:~$ seq 5 | awk '/24/{printf("%s 偶数\n", $1)}' 2 偶数
4 偶数
moch@m-desktop:~$ seq 5 | awk '$1%2==1{print $1, "奇数"}'
1 奇数
3 奇数
5 奇数
moch@m-desktop:~$ seq 5 | awk '$1%2==0{print $1, "偶数"}$1%2{print $1, "奇数"}'
1 奇数
2 偶数
3 奇数
4 偶数
5 奇数
moch@m-desktop:~$ seq 5 | awk 'BEGIN{a=0}$1%2==0{print $1,"偶数"}$1%2{print $1,"奇数"}{a+=$1}END{print "合計", a}'
1 奇数
2 偶数
3 奇数
4 偶数
5 奇数
合計 15
moch@m-desktop:~$
BEGINパターンとENDパターン
BEGINで初期化(a=0)
ENDで最後にやる処理(printで合計を表示)
awkとsortなどを組み合わせる
code:awk.bash
moch@m-desktop:~$ seq 5 | awk '{print $1%2 ? "奇数" : "偶数"}'
奇数
偶数
奇数
偶数
奇数
moch@m-desktop:~$ seq 5 | awk '{print $1%2 ? "奇数" : "偶数"}' | sort | uniq -c
2 偶数
3 奇数
moch@m-desktop:~$ seq 5 | awk '{print $1%2 ? "奇数" : "偶数"}' | sort | uniq -c | awk '{print $2, $1}'
偶数 2
奇数 3
moch@m-desktop:~$
xargsやawkをつかって一気にコマンドを実行する
code:xargs-awk.bash
moch@m-desktop:~/study/shell$ seq 4 | xargs -I{} mkdir "dir_{}"
moch@m-desktop:~/study/shell$ ls
dir_1 dir_2 dir_3 dir_4
moch@m-desktop:~/study/shell$
moch@m-desktop:~/study/shell$ seq 4 | awk '{print "mkdir " ($1%2 ? "odd_": "even_") $1}'
mkdir odd_1
mkdir even_2
mkdir odd_3
mkdir even_4
moch@m-desktop:~/study/shell$ seq 4 | awk '{print "mkdir " ($1%2 ? "odd_": "even_") $1}' | bash
moch@m-desktop:~/study/shell$ ls
even_2 even_4 odd_1 odd_3
moch@m-desktop:~/study/shell$